νμ΄μ¬μ κ°λ ₯ν νλ λμμΈ ν¨ν΄μΈ μ΅μ λ², μ λ΅, 컀맨λλ₯Ό νꡬνμΈμ. μ€μ μμ λ₯Ό ν΅ν΄ μ½λ μ μ°μ±, μ μ§λ³΄μμ±, νμ₯μ±μ ν₯μμν€λ λ°©λ²μ λ°°μλλ€.
νμ΄μ¬ νλ ν¨ν΄: μ΅μ λ², μ λ΅, 컀맨λ
νλ λμμΈ ν¨ν΄μ μννΈμ¨μ΄ κ°λ°μμ νμ λꡬμ λλ€. μ΄λ€μ κ°μ²΄ κ°μ μΌλ°μ μΈ ν΅μ λ° μνΈ μμ© λ¬Έμ λ₯Ό ν΄κ²°νμ¬ λ³΄λ€ μ μ°νκ³ μ μ§λ³΄μ κ°λ₯νλ©° νμ₯ κ°λ₯ν μ½λλ₯Ό λ§λλλ€. μ΄ μ’ ν© κ°μ΄λμμλ νμ΄μ¬μ μΈ κ°μ§ μ€μν νλ ν¨ν΄μΈ μ΅μ λ², μ λ΅, 컀맨λλ₯Ό μ¬μΈ΅μ μΌλ‘ λ€λ£Ήλλ€. μ°λ¦¬λ μ΄ ν¨ν΄λ€μ λͺ©μ , ꡬν λ° μ€μ μμ© μ¬λ‘λ₯Ό νꡬνμ¬ νλ‘μ νΈμμ μ΄ ν¨ν΄λ€μ ν¨κ³Όμ μΌλ‘ νμ©ν μ μλ μ§μμ μ 곡ν κ²μ λλ€.
νλ ν¨ν΄ μ΄ν΄νκΈ°
νλ ν¨ν΄μ κ°μ²΄ κ°μ ν΅μ κ³Ό μνΈ μμ©μ μ€μ μ λ‘λλ€. μ΄λ€μ μκ³ λ¦¬μ¦μ μ μνκ³ κ°μ²΄ κ°μ μ± μμ ν λΉνμ¬ λμ¨ν κ²°ν©κ³Ό μ μ°μ±μ 보μ₯ν©λλ€. μ΄λ¬ν ν¨ν΄μ μ¬μ©ν¨μΌλ‘μ¨ μ΄ν΄νκ³ μμ νλ©° νμ₯νκΈ° μ¬μ΄ μμ€ν μ λ§λ€ μ μμ΅λλ€.
νλ ν¨ν΄ μ¬μ©μ μ£Όμ μ΄μ μ λ€μκ³Ό κ°μ΅λλ€:
- ν₯μλ μ½λ ꡬμ±: νΉμ λμμ μΊ‘μνν¨μΌλ‘μ¨ μ΄ ν¨ν΄λ€μ λͺ¨λμ±κ³Ό λͺ νμ±μ μ¦μ§μν΅λλ€.
- ν₯μλ μ μ°μ±: μ΄ ν¨ν΄λ€μ ν΅ν΄ μμ€ν μ ν΅μ¬ κ΅¬μ± μμλ₯Ό μμ νμ§ μκ³ λ μμ€ν μ λμμ λ³κ²½νκ±°λ νμ₯ν μ μμ΅λλ€.
- κ²°ν©λ κ°μ: νλ ν¨ν΄μ κ°μ²΄ κ°μ λμ¨ν κ²°ν©μ μ΄μ§νμ¬ μ½λλ² μ΄μ€λ₯Ό μ μ§νκ³ ν μ€νΈνκΈ° μ½κ² λ§λλλ€.
- μ¬μ¬μ©μ± μ¦κ°: ν¨ν΄ μ체μ μ΄λ₯Ό ꡬννλ μ½λλ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ΄λ μ¬μ§μ΄ λ€λ₯Έ νλ‘μ νΈμμλ μ¬μ¬μ©λ μ μμ΅λλ€.
μ΅μ λ² ν¨ν΄
μ΅μ λ² ν¨ν΄μ΄λ 무μμΈκ°μ?
μ΅μ λ² ν¨ν΄μ κ°μ²΄ κ°μ μΌλλ€ μ’ μμ±μ μ μνμ¬, νλμ κ°μ²΄(μ£Όμ )μ μνκ° λ³κ²½λ λ λͺ¨λ μ’ μ κ°μ²΄(μ΅μ λ²)κ° μλμΌλ‘ ν΅μ§λ°κ³ μ λ°μ΄νΈλλλ‘ ν©λλ€. μ΄ ν¨ν΄μ λ¨μΌ κ°μ²΄μ μνλ₯Ό κΈ°λ°μΌλ‘ μ¬λ¬ κ°μ²΄ κ°μ μΌκ΄μ±μ μ μ§ν΄μΌ ν λ νΉν μ μ©ν©λλ€. λλ‘λ λ°ν-ꡬλ (Publish-Subscribe) ν¨ν΄μ΄λΌκ³ λ λΆλ¦½λλ€.
μ‘μ§ κ΅¬λ μ λΉμ ν΄ λ³΄μΈμ. λΉμ (μ΅μ λ²)μ μ‘μ§(μ£Όμ )κ° μλ‘μ΄ νΈλ₯Ό λ°νν λλ§λ€ μ λ°μ΄νΈ(μλ¦Ό)λ₯Ό λ°κΈ° μν΄ κ°μ ν©λλ€. λΉμ μ μ νΈκ° λμλμ§ κ³μ νμΈν νμ μμ΄ μλμΌλ‘ ν΅μ§λ°μ΅λλ€.
μ΅μ λ² ν¨ν΄μ κ΅¬μ± μμ
- μ£Όμ (Subject): μν λ³νμ κ΄μ¬μ΄ μλ κ°μ²΄μ λλ€. μ΅μ λ² λͺ©λ‘μ μ μ§νκ³ μ΅μ λ²λ₯Ό μ°κ²°(ꡬλ ) λ° λΆλ¦¬(ꡬλ μ·¨μ)νλ λ©μλλ₯Ό μ 곡ν©λλ€.
- μ΅μ λ²(Observer): μ£Όμ κ° μν λ³νλ₯Ό μ΅μ λ²μκ² μ리기 μν΄ νΈμΆνλ μ λ°μ΄νΈ λ©μλλ₯Ό μ μνλ μΈν°νμ΄μ€ λλ μΆμ ν΄λμ€μ λλ€.
- ꡬ체μ μ£Όμ (ConcreteSubject): Subjectμ ꡬ체μ μΈ κ΅¬νμΌλ‘, μνλ₯Ό μ μ₯νκ³ μνκ° λ³κ²½λ λ μ΅μ λ²μκ² μ립λλ€.
- ꡬ체μ μ΅μ λ²(ConcreteObserver): Observerμ ꡬ체μ μΈ κ΅¬νμΌλ‘, μ£Όμ μ μν λ³νμ λ°μνκΈ° μν΄ μ λ°μ΄νΈ λ©μλλ₯Ό ꡬνν©λλ€.
νμ΄μ¬ ꡬν
λ€μμ μ΅μ λ² ν¨ν΄μ μ€λͺ νλ νμ΄μ¬ μμ μ λλ€:
class Subject:
def __init__(self):
self._observers = []
self._state = None
def attach(self, observer):
self._observers.append(observer)
def detach(self, observer):
self._observers.remove(observer)
def notify(self):
for observer in self._observers:
observer.update(self._state)
@property
def state(self):
return self._state
@state.setter
def state(self, new_state):
self._state = new_state
self.notify()
class Observer:
def update(self, state):
raise NotImplementedError
class ConcreteObserverA(Observer):
def update(self, state):
print(f"ConcreteObserverA: State changed to {state}")
class ConcreteObserverB(Observer):
def update(self, state):
print(f"ConcreteObserverB: State changed to {state}")
# Example Usage
subject = Subject()
observer_a = ConcreteObserverA()
observer_b = ConcreteObserverB()
subject.attach(observer_a)
subject.attach(observer_b)
subject.state = "New State"
subject.detach(observer_a)
subject.state = "Another State"
μ΄ μμ μμ `Subject`λ `Observer` κ°μ²΄ λͺ©λ‘μ μ μ§ν©λλ€. `Subject`μ `state`κ° λ³κ²½λλ©΄, `notify()` λ©μλλ₯Ό νΈμΆνμ¬ μ΅μ λ² λͺ©λ‘μ λ°λ³΅νκ³ `update()` λ©μλλ₯Ό νΈμΆν©λλ€. κ° `ConcreteObserver`λ κ·Έμ λ°λΌ μν λ³κ²½μ λ°μν©λλ€.
μ€μ μ μ© μ¬λ‘
- μ΄λ²€νΈ μ²λ¦¬: GUI νλ μμν¬μμ μ΅μ λ² ν¨ν΄μ μ΄λ²€νΈ μ²λ¦¬μ κ΄λ²μνκ² μ¬μ©λ©λλ€. μ¬μ©μκ° UI μμ(μ: λ²νΌ ν΄λ¦)μ μνΈ μμ©ν λ, ν΄λΉ μμ(μ£Όμ )λ λ±λ‘λ 리μ€λ(μ΅μ λ²)μκ² μ΄λ²€νΈλ₯Ό μ립λλ€.
- λ°μ΄ν° λΈλ‘λμΊμ€ν : κΈμ΅ μ ν리μΌμ΄μ μμ μ£Όμ μμΈ νμκΈ°(μ£Όμ )λ λ±λ‘λ ν΄λΌμ΄μΈνΈ(μ΅μ λ²)μκ² κ°κ²© μ λ°μ΄νΈλ₯Ό λΈλ‘λμΊμ€νΈν©λλ€.
- μ€νλ λμνΈ μ ν리μΌμ΄μ : μ€νλ λμνΈμ μ μ΄ λ³κ²½λλ©΄ μ’ μ μ (μ΅μ λ²)μ μλμΌλ‘ μ¬κ³μ°λκ³ μ λ°μ΄νΈλ©λλ€.
- μμ λ―Έλμ΄ μλ¦Ό: λκ΅°κ° μμ λ―Έλμ΄ νλ«νΌμ κ²μλ¬Όμ μ¬λ¦¬λ©΄, νλ‘μ(μ΅μ λ²)μκ² μλ¦Όμ΄ μ λ¬λ©λλ€.
μ΅μ λ² ν¨ν΄μ μ₯μ
- λμ¨ν κ²°ν©: μ£Όμ μ μ΅μ λ²λ μλ‘μ ꡬ체μ μΈ ν΄λμ€λ₯Ό μ νμκ° μμ΄ λͺ¨λμ±κ³Ό μ¬μ¬μ©μ±μ μ¦μ§μν΅λλ€.
- νμ₯μ±: μ£Όμ λ₯Ό μμ νμ§ μκ³ λ μλ‘μ΄ μ΅μ λ²λ₯Ό μ½κ² μΆκ°ν μ μμ΅λλ€.
- μ μ°μ±: μ£Όμ λ λ€μν λ°©μ(μ: λκΈ°μ λλ λΉλκΈ°μ)μΌλ‘ μ΅μ λ²μκ² μ릴 μ μμ΅λλ€.
μ΅μ λ² ν¨ν΄μ λ¨μ
- μμμΉ λͺ»ν μ λ°μ΄νΈ: μ΅μ λ²λ κ΄μ¬ μλ λ³κ²½ μ¬νμ λν΄ ν΅μ§λ°μ μ μμ΄ μμ λλΉλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
- μ λ°μ΄νΈ 체μΈ: μ°μμ μΈ μ λ°μ΄νΈλ 볡μ‘ν΄μ§κ³ λλ²κ·ΈνκΈ° μ΄λ €μΈ μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ λμ: μ΅μ λ²κ° μ λλ‘ λΆλ¦¬λμ§ μμΌλ©΄ κ°λΉμ§ 컬λ μ λμ§ μμ λ©λͺ¨λ¦¬ λμκ° λ°μν μ μμ΅λλ€.
μ λ΅ ν¨ν΄
μ λ΅ ν¨ν΄μ΄λ 무μμΈκ°μ?
μ λ΅ ν¨ν΄μ μκ³ λ¦¬μ¦ κ΅°μ μ μνκ³ , κ° μκ³ λ¦¬μ¦μ μΊ‘μννλ©°, μ΄λ€μ μνΈ κ΅ν κ°λ₯νκ² λ§λλλ€. μ λ΅μ μκ³ λ¦¬μ¦μ΄ μ΄λ₯Ό μ¬μ©νλ ν΄λΌμ΄μΈνΈμ λ 립μ μΌλ‘ λ³κ²½λ μ μλλ‘ ν©λλ€. μ΄ ν¨ν΄μ μμ μ μννλ μ¬λ¬ κ°μ§ λ°©λ²μ΄ μκ³ , ν΄λΌμ΄μΈνΈ μ½λλ₯Ό μμ νμ§ μκ³ λ°νμμ μ΄λ€ μ¬μ΄λ₯Ό μ νν μ μμ΄μΌ ν λ μ μ©ν©λλ€.
ν λμμμ λ€λ₯Έ λμλ‘ μ¬ννλ€κ³ μμν΄ λ³΄μΈμ. λΉνκΈ°, κΈ°μ°¨, μλμ°¨ λ± λ€μν κ΅ν΅ μ λ΅μ μ νν μ μμ΅λλ€. μ λ΅ ν¨ν΄μ μ¬μ©νλ©΄ λͺ©μ μ§λ₯Ό λ³κ²½νμ§ μκ³ λ λΉμ©, μκ°, νΈμμ± λ±μ μμΈμ λ°λΌ μ΅μ μ κ΅ν΅ μ λ΅μ μ νν μ μμ΅λλ€.
μ λ΅ ν¨ν΄μ κ΅¬μ± μμ
- μ λ΅(Strategy): μκ³ λ¦¬μ¦μ μ μνλ μΈν°νμ΄μ€ λλ μΆμ ν΄λμ€μ λλ€.
- ꡬ체μ μ λ΅(ConcreteStrategy): Strategy μΈν°νμ΄μ€μ ꡬ체μ μΈ κ΅¬νμΌλ‘, κ°κ° λ€λ₯Έ μκ³ λ¦¬μ¦μ λνλ λλ€.
- 컨ν μ€νΈ(Context): Strategy κ°μ²΄μ λν μ°Έμ‘°λ₯Ό μ μ§νκ³ μκ³ λ¦¬μ¦ μ€νμ μμνλ ν΄λμ€μ λλ€. 컨ν μ€νΈλ Strategyμ νΉμ ꡬνμ μ νμκ° μμΌλ©°, Strategy μΈν°νμ΄μ€μλ§ μνΈ μμ©ν©λλ€.
νμ΄μ¬ ꡬν
λ€μμ μ λ΅ ν¨ν΄μ μ€λͺ νλ νμ΄μ¬ μμ μ λλ€:
class Strategy:
def execute(self, data):
raise NotImplementedError
class ConcreteStrategyA(Strategy):
def execute(self, data):
print("Executing Strategy A...")
return sorted(data)
class ConcreteStrategyB(Strategy):
def execute(self, data):
print("Executing Strategy B...")
return sorted(data, reverse=True)
class Context:
def __init__(self, strategy):
self._strategy = strategy
def set_strategy(self, strategy):
self._strategy = strategy
def execute_strategy(self, data):
return self._strategy.execute(data)
# Example Usage
data = [1, 5, 3, 2, 4]
strategy_a = ConcreteStrategyA()
context = Context(strategy_a)
result = context.execute_strategy(data)
print(f"Result with Strategy A: {result}")
strategy_b = ConcreteStrategyB()
context.set_strategy(strategy_b)
result = context.execute_strategy(data)
print(f"Result with Strategy B: {result}")
μ΄ μμ μμ `Strategy` μΈν°νμ΄μ€λ `execute()` λ©μλλ₯Ό μ μν©λλ€. `ConcreteStrategyA`μ `ConcreteStrategyB`λ μ΄ λ©μλμ λ€λ₯Έ ꡬνμ μ 곡νλ©°, κ°κ° λ°μ΄ν°λ₯Ό μ€λ¦μ°¨μ λ° λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ν©λλ€. `Context` ν΄λμ€λ `Strategy` κ°μ²΄μ λν μ°Έμ‘°λ₯Ό μ μ§νκ³ μκ³ λ¦¬μ¦ μ€νμ μμν©λλ€. ν΄λΌμ΄μΈνΈλ `set_strategy()` λ©μλλ₯Ό νΈμΆνμ¬ λ°νμμ μ λ΅μ μ νν μ μμ΅λλ€.
μ€μ μ μ© μ¬λ‘
- κ²°μ μ²λ¦¬: μ μμκ±°λ νλ«νΌμ λ€μν κ²°μ λ°©λ²(μ: μ μ©μΉ΄λ, PayPal, μν μ‘κΈ)μ μ§μνκΈ° μν΄ μ λ΅ ν¨ν΄μ μ¬μ©ν©λλ€. κ° κ²°μ λ°©λ²μ ꡬ체μ μΈ μ λ΅μΌλ‘ ꡬνλ©λλ€.
- λ°°μ‘λΉ κ³μ°: μ¨λΌμΈ μλ§€μ 체λ 무κ², λͺ©μ μ§, λ°°μ‘ λ°©λ²κ³Ό κ°μ μμΈμ κΈ°λ°μΌλ‘ λ°°μ‘λΉλ₯Ό κ³μ°νκΈ° μν΄ μ λ΅ ν¨ν΄μ μ¬μ©ν©λλ€.
- μ΄λ―Έμ§ μμΆ: μ΄λ―Έμ§ νΈμ§ μννΈμ¨μ΄λ λ€μν μ΄λ―Έμ§ μμΆ μκ³ λ¦¬μ¦(μ: JPEG, PNG, GIF)μ μ§μνκΈ° μν΄ μ λ΅ ν¨ν΄μ μ¬μ©ν©λλ€.
- λ°μ΄ν° μ ν¨μ± κ²μ¬: λ°μ΄ν° μ λ ₯ μμμ μ λ ₯λλ λ°μ΄ν° μ ν(μ: μ΄λ©μΌ μ£Όμ, μ νλ²νΈ, λ μ§)μ λ°λΌ λ€λ₯Έ μ ν¨μ± κ²μ¬ μ λ΅μ μ¬μ©ν μ μμ΅λλ€.
- κ²½λ‘ νμ μκ³ λ¦¬μ¦: GPS λ΄λΉκ²μ΄μ μμ€ν μ μ¬μ©μ μ νΈλμ λ°λΌ λ€μν κ²½λ‘ νμ μκ³ λ¦¬μ¦(μ: μ΅λ¨ 거리, μ΅λ¨ μκ°, μ΅μ κ΅ν΅λ)μ μ¬μ©ν©λλ€.
μ λ΅ ν¨ν΄μ μ₯μ
- μ μ°μ±: 컨ν μ€νΈλ₯Ό μμ νμ§ μκ³ λ μλ‘μ΄ μ λ΅μ μ½κ² μΆκ°ν μ μμ΅λλ€.
- μ¬μ¬μ©μ±: μ λ΅μ λ€μν 컨ν μ€νΈμμ μ¬μ¬μ©λ μ μμ΅λλ€.
- μΊ‘μν: κ° μ λ΅μ μ체 ν΄λμ€μ μΊ‘μνλμ΄ λͺ¨λμ±κ³Ό λͺ νμ±μ μ¦μ§μν΅λλ€.
- κ°λ°©/νμ μμΉ: κΈ°μ‘΄ μ½λλ₯Ό μμ νμ§ μκ³ μλ‘μ΄ μ λ΅μ μΆκ°νμ¬ μμ€ν μ νμ₯ν μ μμ΅λλ€.
μ λ΅ ν¨ν΄μ λ¨μ
- 볡μ‘μ± μ¦κ°: ν΄λμ€ μκ° μ¦κ°νμ¬ μμ€ν μ΄ λ 볡μ‘ν΄μ§ μ μμ΅λλ€.
- ν΄λΌμ΄μΈνΈ μΈμ: ν΄λΌμ΄μΈνΈλ μ¬μ© κ°λ₯ν λ€μν μ λ΅μ μΈμ§νκ³ μ μ ν μ λ΅μ μ νν΄μΌ ν©λλ€.
컀맨λ ν¨ν΄
컀맨λ ν¨ν΄μ΄λ 무μμΈκ°μ?
컀맨λ ν¨ν΄μ μμ²μ κ°μ²΄λ‘ μΊ‘μννμ¬, ν΄λΌμ΄μΈνΈλ₯Ό λ€μν μμ²μΌλ‘ λ§€κ°λ³μννκ³ , μμ²μ λκΈ°μ΄μ λ£κ±°λ κΈ°λ‘νλ©°, μ€ν μ·¨μ κ°λ₯ν μμ μ μ§μν μ μλλ‘ ν©λλ€. μ΄λ μμ μ νΈμΆνλ κ°μ²΄μ μμ μ μννλ λ°©λ²μ μλ κ°μ²΄λ₯Ό λΆλ¦¬ν©λλ€.
λ μ€ν λμ μκ°ν΄ 보μΈμ. λΉμ (ν΄λΌμ΄μΈνΈ)μ μ¨μ΄ν°(νΈμΆμ)μκ² μ£Όλ¬Έ(컀맨λ)μ ν©λλ€. μ¨μ΄ν°λ μ§μ μμμ μ€λΉνμ§ μκ³ , μ£Όλ¬Έμ μ€μ λ‘ νλμ μννλ μ리μ¬(μμ μ)μκ² μ λ¬ν©λλ€. 컀맨λ ν¨ν΄μ μ£Όλ¬Έ νλ‘μΈμ€μ μ리 νλ‘μΈμ€λ₯Ό λΆλ¦¬ν μ μλλ‘ ν©λλ€.
컀맨λ ν¨ν΄μ κ΅¬μ± μμ
- 컀맨λ(Command): μμ²μ μ€ννκΈ° μν λ©μλλ₯Ό μ μΈνλ μΈν°νμ΄μ€ λλ μΆμ ν΄λμ€μ λλ€.
- ꡬ체μ 컀맨λ(ConcreteCommand): Command μΈν°νμ΄μ€μ ꡬ체μ μΈ κ΅¬νμΌλ‘, μμ μ κ°μ²΄λ₯Ό νΉμ λμμ λ°μΈλ©ν©λλ€.
- μμ μ(Receiver): μ€μ μμ μ μννλ κ°μ²΄μ λλ€.
- νΈμΆμ(Invoker): 컀맨λμκ² μμ²μ μννλλ‘ μμ²νλ κ°μ²΄μ λλ€. Command κ°μ²΄λ₯Ό 보μ νκ³ , execute λ©μλλ₯Ό νΈμΆνμ¬ μμ μ μμν©λλ€.
- ν΄λΌμ΄μΈνΈ(Client): ConcreteCommand κ°μ²΄λ₯Ό μμ±νκ³ ν΄λΉ μμ μλ₯Ό μ€μ ν©λλ€.
νμ΄μ¬ ꡬν
λ€μμ 컀맨λ ν¨ν΄μ μ€λͺ νλ νμ΄μ¬ μμ μ λλ€:
class Command:
def execute(self):
raise NotImplementedError
class ConcreteCommand(Command):
def __init__(self, receiver, action):
self._receiver = receiver
self._action = action
def execute(self):
self._receiver.action(self._action)
class Receiver:
def action(self, action):
print(f"Receiver: Performing action '{action}'")
class Invoker:
def __init__(self):
self._commands = []
def add_command(self, command):
self._commands.append(command)
def execute_commands(self):
for command in self._commands:
command.execute()
# Example Usage
receiver = Receiver()
command1 = ConcreteCommand(receiver, "Operation 1")
command2 = ConcreteCommand(receiver, "Operation 2")
invoker = Invoker()
invoker.add_command(command1)
invoker.add_command(command2)
invoker.execute_commands()
μ΄ μμ μμ `Command` μΈν°νμ΄μ€λ `execute()` λ©μλλ₯Ό μ μν©λλ€. `ConcreteCommand`λ `Receiver` κ°μ²΄λ₯Ό νΉμ λμμ λ°μΈλ©ν©λλ€. `Invoker` ν΄λμ€λ `Command` κ°μ²΄ λͺ©λ‘μ μ μ§νκ³ μμλλ‘ μ€νν©λλ€. ν΄λΌμ΄μΈνΈλ `ConcreteCommand` κ°μ²΄λ₯Ό μμ±νμ¬ `Invoker`μ μΆκ°ν©λλ€.
μ€μ μ μ© μ¬λ‘
- GUI ν΄λ° λ° λ©λ΄: κ° λ²νΌ λλ λ©λ΄ νλͺ©μ 컀맨λλ‘ ννλ μ μμ΅λλ€. μ¬μ©μκ° λ²νΌμ ν΄λ¦νλ©΄ ν΄λΉ 컀맨λκ° μ€νλ©λλ€.
- νΈλμμ μ²λ¦¬: λ°μ΄ν°λ² μ΄μ€ μμ€ν μμ κ° νΈλμμ μ 컀맨λλ‘ ννλ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ€ν μ·¨μ/λ€μ μ€ν κΈ°λ₯ λ° νΈλμμ λ‘κΉ μ΄ κ°λ₯ν©λλ€.
- λ§€ν¬λ‘ κΈ°λ‘: μννΈμ¨μ΄ μ ν리μΌμ΄μ μ λ§€ν¬λ‘ κΈ°λ‘ κΈ°λ₯μ 컀맨λ ν¨ν΄μ μ¬μ©νμ¬ μ¬μ©μ λμμ μΊ‘μ²νκ³ μ¬μν©λλ€.
- μμ λκΈ°μ΄: λΉλκΈ°μ μΌλ‘ μμ μ μ²λ¦¬νλ μμ€ν μ μ’ μ’ μμ λκΈ°μ΄μ μ¬μ©νλ©°, μ¬κΈ°μ κ° μμ μ 컀맨λλ‘ ννλ©λλ€.
- μ격 νλ‘μμ νΈμΆ(RPC): RPC λ©μ»€λμ¦μ μ격 λ©μλ νΈμΆμ μΊ‘μννκΈ° μν΄ μ»€λ§¨λ ν¨ν΄μ μ¬μ©ν©λλ€.
컀맨λ ν¨ν΄μ μ₯μ
- κ²°ν© ν΄μ : νΈμΆμμ μμ μκ° λΆλ¦¬λμ΄ μ μ°μ±κ³Ό μ¬μ¬μ©μ±μ λμ λλ€.
- λκΈ°μ΄ λ° λ‘κΉ : 컀맨λλ₯Ό λκΈ°μ΄μ λ£κ³ κΈ°λ‘ν μ μμ΄ μ€ν μ·¨μ/λ€μ μ€ν λ° κ°μ¬ μΆμ κ³Ό κ°μ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
- λ§€κ°λ³μν: 컀맨λλ₯Ό λ€μν μμ²μΌλ‘ λ§€κ°λ³μνν μ μμ΄ λ€μ©λλ‘ μ¬μ©ν μ μμ΅λλ€.
- μ€ν μ·¨μ/λ€μ μ€ν μ§μ: 컀맨λ ν¨ν΄μ μ€ν μ·¨μ/λ€μ μ€ν κΈ°λ₯μ λ μ½κ² ꡬνν μ μλλ‘ ν©λλ€.
컀맨λ ν¨ν΄μ λ¨μ
- 볡μ‘μ± μ¦κ°: ν΄λμ€ μκ° μ¦κ°νμ¬ μμ€ν μ΄ λ 볡μ‘ν΄μ§ μ μμ΅λλ€.
- μ€λ²ν€λ: 컀맨λ κ°μ²΄λ₯Ό μμ±νκ³ μ€ννλ λ° μ½κ°μ μ€λ²ν€λκ° λ°μν μ μμ΅λλ€.
κ²°λ‘
μ΅μ λ², μ λ΅, 컀맨λ ν¨ν΄μ νμ΄μ¬μμ μ μ°νκ³ μ μ§λ³΄μ κ°λ₯νλ©° νμ₯ κ°λ₯ν μννΈμ¨μ΄ μμ€ν μ ꡬμΆνκΈ° μν κ°λ ₯ν λꡬμ λλ€. μ΄ ν¨ν΄λ€μ λͺ©μ , ꡬν λ° μ€μ μμ© μ¬λ‘λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ μΌλ°μ μΈ μ€κ³ λ¬Έμ λ₯Ό ν΄κ²°νκ³ λ³΄λ€ κ²¬κ³ νκ³ μ μλ ₯ μλ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€. κ° ν¨ν΄κ³Ό κ΄λ ¨λ μ₯λ¨μ μ κ³ λ €νκ³ νΉμ μꡬ μ¬νμ κ°μ₯ μ ν©ν ν¨ν΄μ μ ννλ κ²μ κΈ°μ΅νμμμ€. μ΄λ¬ν νλ ν¨ν΄μ λ§μ€ν°νλ©΄ μννΈμ¨μ΄ μμ§λμ΄λ‘μμ μλμ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.